export default {
  props: {
    event: {
      type: Object,
      default: () => ({})
    },
    cardInfo: {
      type: Object,
      default: () => ({})
    },
    // 表单操作模式
    formEditingMode: {
      type: String,
      default: '', // create | edit
    },
  },
  computed: {
    /**
     * @description 附加组件操作的前提是事件未删除
     */
    editable() {
      return this.event.isDelete == 0;
    },
    /**
     * @description 是老权限，只有两个权限，没有返回canCreate以及canDelete
     */
    isOldAuth() {
      let { canCreate, canDelete } = this.cardInfo;
      return canCreate === undefined && canDelete === undefined;
    },
    /**
     * @description 当前节点的附加组件是否可以进行编辑，删除，添加操作
     */
    stateCanEdit() {
      let { state } = this.event;

      // 该附加组件设置处于某种状态下可以编辑
      let stateCanEdit = this.cardInfo.stateCanEdit;

      // 没有设置则默认可以
      if (!stateCanEdit || !stateCanEdit.length) return true;

      // 如果设置了，则判断设置的节点是否包含当前状态
      return stateCanEdit.indexOf(state) > -1;
    },
    /** 
    * @description 允许新增
    * 1.有新增权限 或者 老权限(无新增和删除)且有编辑权限
    * 2.附加组件设置的允许某种状态下可编辑 或 无设置
    */
    allowCreate() {
      let { canCreate, canWrite } = this.cardInfo;
      let hasCreateAuth = canCreate || (this.isOldAuth && canWrite);

      return this.editable && hasCreateAuth && this.stateCanEdit;
    },
    /** 
    * @description 允许编辑
    * 1.有编辑权限
    * 2.附加组件设置的允许某种状态下可编辑 或 无设置
    */
    allowEdit() {
      return this.editable && this.cardInfo.canWrite && this.stateCanEdit;
    },
    /** 
    * @description 允许删除
    * 1.有删除权限 或者 老权限(无新增和删除)且有编辑权限
    * 2.附加组件设置的允许某种状态下可编辑 或 无设置
    */
    allowDelete() {
      let { canDelete, canWrite } = this.cardInfo;
      let hasDeleteAuth = canDelete || (this.isOldAuth && canWrite);

      return this.editable && hasDeleteAuth && this.stateCanEdit;
    }
  },
}
